package com.tyae.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.tyae.bean.Empresa;
import com.tyae.bean.Comarca;
import com.tyae.bean.Usuario;
import com.tyae.validador.GeraMensagem;
import com.tyae.validador.ValidadorFactory;
import com.tyae.validador.Validar;
import com.tyae.dao.DAOFactory;

@ManagedBean
@SessionScoped
public class ControleComarca implements Serializable{

	private static final long serialVersionUID = 3231096585790205081L;
	private Comarca comarca;
	private String mensagem;
	private List<Comarca> lista = new ArrayList<Comarca>();  
	private String textoPesquisa = "";
	private String retorno = "cadastro";
    private Empresa empresa;
	
	public ControleComarca(){
		create();
	}

	public void create(){
		comarca = new Comarca();
	}

	public Comarca getComarca() {
		if (comarca == null){
			create();
		}
		return comarca;
	}

	public void setComarca(Comarca comarca) {
		this.comarca = comarca;
	}

	public String alterar(){
		return "cadastro";
	}

	public String adicionar(){
		create();
		return "cadastro";
	}

	public void pesquisar(){
		setLista(DAOFactory.getComarcaDAO().getSelecionar(textoPesquisa, getEmpresa().getCodigoEmpresa()));
	}

	public String gravar(){
		
		Validar validador = ValidadorFactory.getValidador();
		validador.validar(comarca);
		String[] mensagens = validador.getMensagensValidacao();
		mensagem = GeraMensagem.getMensagem(mensagens);
		retorno = "manutencao"; 
		setMensagem(mensagem);		
		if (validador.isOk() && mensagem.isEmpty() ){		
 			if (getComarca().getCodigoComarca() == 0){
				try {
					comarca.setEmpresa(getEmpresa());
					DAOFactory.getComarcaDAO().inserir(comarca);
					setMensagem("Cadastro com Sucesso");
					retorno = "manutencao";
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,getMensagem(), ""));
				} catch (Exception e) {
					setMensagem("erro: "+e.getMessage());
					retorno = "cadastro";
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,getMensagem(), ""));
				}
			}else{
				try {
					DAOFactory.getComarcaDAO().alterar(comarca);
					setMensagem("Alterado com Sucesso");
					retorno = "manutencao";
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,getMensagem(), ""));
				} catch (Exception e) {
					setMensagem("erro: "+e.getMessage());
					retorno = "cadastro";
					FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,getMensagem(), ""));
				}
			}
 			pesquisar();
		}else{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,getMensagem(), ""));
			retorno = "cadastro";
		}
		return retorno;
	}

	public void excluir(){
		try {
			DAOFactory.getComarcaDAO().excluir(comarca);
		} catch (Exception e) {
			setMensagem(e.getMessage());
		}
		pesquisar();
	}

	public void limpar(){
		if (getComarca().getCodigoComarca() == 0){
			create();
			textoPesquisa = "";
		}
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public List<Comarca> getLista() {
		return lista;
	}

	public void setLista(List<Comarca> lista) {
		this.lista = lista;
	}

	public String getTextoPesquisa() {
		return textoPesquisa;
	}

	public void setTextoPesquisa(String textoPesquisa) {
		this.textoPesquisa = textoPesquisa;
	}

	public String getRetorno() {
		return retorno;
	}

	public void setRetorno(String retorno) {
		this.retorno = retorno;
	}

	public Empresa getEmpresa() {
		if (empresa == null){
			HttpSession session = null;	
			session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );  
			Usuario usuario = (Usuario) session.getAttribute( "usr" ); 		
			empresa = usuario.getEmpresa();
		}
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

}